package com.example.service.shop;


import com.example.entity.shop.SellerProduct;
import com.example.mapper.SellerProductMapper;
import com.example.service.utils.InventoryRecommendation;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 卖家出售的商品表业务处理
 **/
@Service
public class SellerProductService {

    @Resource
    private SellerProductMapper sellerProductMapper;
    @Resource
    private InventoryRecommendation inventoryRecommendation;

    /**
     * 新增
     */
    public void add(SellerProduct sellerProduct) {
        sellerProduct.setCurrentStock(sellerProduct.getStockQuantity());
        sellerProductMapper.insert(sellerProduct);
    }

    /**
     * 删除
     */
    public void deleteById(Integer id) {
        sellerProductMapper.deleteById(id);
    }

    /**
     * 批量删除
     */
    public void deleteBatch(List<Integer> ids) {
        for (Integer id : ids) {
            sellerProductMapper.deleteById(id);
        }
    }

    /**
     * 修改
     */
    public void updateById(SellerProduct sellerProduct) {
        //如果当前库存大于0，则更新商品状态
        if (sellerProduct.getCurrentStock() > 0) {
            sellerProduct.setProductStatus("有货");
        }else if(sellerProduct.getCurrentStock() == 0){
            sellerProduct.setProductStatus("售罄");
        }
        sellerProductMapper.updateById(sellerProduct);
    }

    /**
     * 根据ID查询
     */
    public SellerProduct selectById(Integer id) {
        return sellerProductMapper.selectById(id);
    }

    /**
     * 查询所有
     */
    public List<SellerProduct> selectAll(SellerProduct sellerProduct) {
        return sellerProductMapper.selectAll(sellerProduct);
    }
    /**
     * 根据ID批量查询
     */
  public List<SellerProduct> selectByIds(List<Integer> ids){
        return sellerProductMapper.selectByIds(ids);
  }
    /**
     * 分页查询
     */
    public PageInfo<SellerProduct> selectPage(SellerProduct sellerProduct, Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<SellerProduct> list = sellerProductMapper.selectAll(sellerProduct);
        return PageInfo.of(list);
    }

    /**
     * 查询库存不足药品
     * @param sellerProduct
     * @param pageNum
     * @param pageSize
     * @return
     */
    public PageInfo<SellerProduct> selectStockNotEnough(SellerProduct sellerProduct, Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        // 将数据库中所有的数据都列举出来
        List<SellerProduct> products = sellerProductMapper.selectAll(sellerProduct);
        List<SellerProduct> list = new ArrayList<>();
        for (SellerProduct product : products) {
            // 调度库存推荐算法,如果当前的实际库存小于推荐库存则预警
            if(inventoryRecommendation.inventoryQuantity(product.getSellerProductId()) > product.getCurrentStock()) {
                list.add(product);
            }
        }
        return PageInfo.of(list);
    }

    /**
     * 查询所有商品类别，并用distinct取消重复
     * @return
     */
    public List<SellerProduct> selectAllCategory(){
        return sellerProductMapper.selectAllCategory();
    }
    /**
     * 查询所有商品类别，以及类别数据，用于柱状图
     * @return
     */
    public List<SellerProduct> selectCategoryCount(){
        return sellerProductMapper.countCategory();
    }

    /**
     * 批量修改
     * @param sellerProducts
     */
    public void updateBatch(List<SellerProduct> sellerProducts){
        System.out.println("sellerProducts = " + sellerProducts);
        for (SellerProduct sellerProduct : sellerProducts) {
            sellerProductMapper.updateById(sellerProduct);
        }
    }

}